/*
 * openmv.c
 *
 *  Created on: Oct 1, 2022
 *      Author: 31866
 */

#include "openmv.h"


uint16_t Cx=0,Cy=0;  //中心点的坐标
uint16_t Cw=0,Ch=0;  //目标物体的宽度和高度。
uint8_t RxBuffer[4]={0};
uint8_t RxCounter=0;
uint8_t state=0;
/*
 * RxState=0代表还没接收到数据
 * RxState=1代表接收到0X2C，开始接收整个数据段，但还不是数据位，只是检验标识
 * RxState=2代表接收到0X12，同样是校验标识，还不是数据位
 * RxState=3代表开始进入到数据位。
 * RxState=4代表已进入数据段的结束位。
 */
//void Receive_Openmv(uint8_t com_data)
//{
//	uint8_t i=0;
//	static uint8_t RxCounter1=0;
//	static   //注意是十六位的数据，不是八位
//	static uint8_t RxState=0;
//	static uint8_t RxFlag1=0;
//
//	if(RxState==0&&com_data==0x2C)   //0X2C帧头
//	{
//		RxState=1;
//		RxBuffer1[RxCounter1++]=com_data;
//	}
//
//	else if(RxState==1&&com_data==0X12)   //0X12帧头
//	{
//		RxState=2;
//		RxBuffer1[RxCounter1++]=com_data;
//	}
//
//	else if(RxState==2)     //进入数据有效位阶段。（循环进行几次）
//	{
//		RxBuffer1[RxCounter1++]=com_data;    //(RxCounter1++)=2、3    RxCounter1最终为5
//		if(RxCounter1>=4||com_data==0x5B)
//		{
//			RxState=3;   //数据有效位的最后一位
//			RxFlag1=1;
//			//RxCounter1=4
//			Cx=RxBuffer1[RxCounter1-2]*2;  //从前面保存的值，提出保存到Cx，Cy,44
//			Cy=RxBuffer1[RxCounter1-1]*2;//18
////			Cw=RxBuffer1[RxCounter1-3];
////			Ch=RxBuffer1[RxCounter1-2];
//
//
//		}
//	}
//
//	else if(RxState==3)  //进入结束标志
//	{
//		LCD_ShowNum(100,210,com_data,GetPlace(com_data),16);
//		if(com_data==0X5B)   //接收到结束标志
//		{
//			HAL_GPIO_WritePin(LED_GPIO_Port,LED_Pin,0);  //点亮LED测试用
//			RxFlag1=0;  //正确接收
//			RxCounter1=0;  //清空索引，重新开始给RxBuffer开始赋值
//			RxState=0;    //回到最初始状态。
//		}
//		else //接收错误
//		{
//			RxState=0;
//			RxCounter1=0;
//			for(i=0;i<5;i++)
//			{
//				RxBuffer1[i]=0x00;
//			}
//		}
//	}
//}

//void Openmv_Receive_Data(uint8_t data)
//{
//	static uint8_t state=0;
//	if(state==0&&data==0x2C)
//	{
//		state=1;   //进入状态1
//		RxBuffer[RxCounter++]=data; //021
//	}
//	else if(state==1&&data==0x12)
//	{
//		state=2;
//		RxBuffer[RxCounter++]=data;   //122
//	}
//	else if(state==1&&data!=0x12)
//	{
//		state=0;  //回到状态1Q
//	}
//	else if(state==2)
//	{
//		RxBuffer[RxCounter++]=data;  //223,324,425
//		if(RxCounter>=4||data==0x5B)
//		{
//			state=3;
//			Cx=RxBuffer[0];
//			Cy=RxBuffer[1];
//			Cw=RxBuffer[2];
//			Ch=RxBuffer[3];
//		    printf("1:%d\n",RxBuffer[0]);
//		    printf("2:%d\n",RxBuffer[1]);
//		    printf("3:%d\n",RxBuffer[2]);
//		    printf("4:%d\n",RxBuffer[3]);
//		    printf("5:%d\n",RxBuffer[4]);
//		    printf("\n");
//		}
//	}
//	else if(state==3)
//	{
//		if(RxBuffer[RxCounter-1]==0X5B)
//		{
//			state=0;
//			RxCounter=0;
//		}
//		else
//		{
//			state=0;
//			RxCounter=0;
//		}
//	}
//	else
//	{
//		state=0;
//		RxCounter=0;
//	}
//}

void Openmv_Receive_Data(uint8_t data)
{
	if(state==0&&data==0x2C)
	{
		state=1;   //进入状态1
		RxBuffer[RxCounter++]=data; //021
	}
	else if(state==1)
	{
		RxBuffer[RxCounter++]=data;   //122 223 324
		if(data==0x3A)
		{
			state=0;
			RxCounter=0;
			printf("RxBuffer[0]:%d\n",RxBuffer[0]);
			printf("RxBuffer[1]:%d\n",RxBuffer[1]);
			printf("RxBuffer[2]:%d\n",RxBuffer[2]);
			printf("RxBuffer[3]:%d\n",RxBuffer[3]);
			printf("\n");
		}
	}
	else
	{
		state=0;
	}
}

void IsAimXMiddle()
{
	if(HAL_GPIO_ReadPin(OpenMV_GPIO_Port,OpenMV_Pin)==1)
	{
		HAL_GPIO_WritePin(Relayer2_GPIO_Port,Relayer2_Pin,1); //放电继电器打开
		HAL_GPIO_WritePin(Beep_GPIO_Port,Beep_Pin,1);     //蜂鸣器响
	}
	else
	{
		return;
	}
}




